module PRN_Detector (
    input clk,            // 时钟信号
    input rst_n,          // 复位信号
    input [6:0] input_code,  // 接收到的伪随机码输入
    output reg lock       // 锁定标志，表示检测是否匹配
);
    // LFSR生成器
    reg [6:0] lfsr_reg;
    wire feedback;
    reg [6:0] prev_code; // 存储前一个输入值

    // 计算反馈值（异或反馈）
    assign feedback = lfsr_reg[6] ^ lfsr_reg[5]; // x^7 + x^6

    // 每个时钟周期更新LFSR状态
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            // 复位时LFSR初始状态
            lfsr_reg <= 7'b1011011; // 随便选择一个非全0的初始状态
        end else begin
            // 移位并插入反馈值
            lfsr_reg <= {lfsr_reg[5:0], feedback};
        end
    end

    // 锁定检测：当输入与本地生成的码完全一致时，输出锁定信号
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            prev_code <= 7'b0;
            lock <= 0;
        end else begin
            if (input_code == lfsr_reg) 
            begin
                // 锁定标志置为1，表示检测到匹配
                lock <= 1;
            end else begin
                lock <= 0;
            end
            prev_code <= input_code; // 保存上次的输入
        end
    end
endmodule
